home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / obero / Interfaces3_4.lha / Interfaces / Hardware.mod < prev    next >
Text File  |  1994-03-05  |  13KB  |  459 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: Hardware.mod 40.15 (28.12.93) Oberon 3.0
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE Hardware; (* $Implementation- *)
  12.  
  13. IMPORT e * := Exec;
  14.  
  15. CONST
  16. (* ADKBits: *)
  17.   adkSet   * = 15; (* standard set/clear bit *)
  18.   preComp1 * = 14; (* two bits of precompensation *)
  19.   preComp0 * = 13;
  20.   mfmPrec  * = 12; (* use mfm style precompensation *)
  21.   uartBrk  * = 11; (* force uart output to zero *)
  22.   wordSync * = 10; (* enable DSKSYNC register matching *)
  23.   msbSync  * = 9;  (* (Apple GCR Only) sync on MSB for reading *)
  24.   fast     * = 8;  (* 1 -> 2 us/bit (mfm), 2 -> 4 us/bit (gcr) *)
  25.   use3pn   * = 7;  (* use aud chan 3 to modulate period of ?? *)
  26.   use2p3   * = 6;  (* use aud chan 2 to modulate period of 3 *)
  27.   use1p2   * = 5;  (* use aud chan 1 to modulate period of 2 *)
  28.   use0p1   * = 4;  (* use aud chan 0 to modulate period of 1 *)
  29.   use3vn   * = 3;  (* use aud chan 3 to modulate volume of ?? *)
  30.   use2v3   * = 2;  (* use aud chan 2 to modulate volume of 3 *)
  31.   use1v2   * = 1;  (* use aud chan 1 to modulate volume of 2 *)
  32.   use0v1   * = 0;  (* use aud chan 0 to modulate volume of 1 *)
  33.  
  34.   pre000ns  * = {};                  (* 000 ns of precomp *)
  35.   pre140ns  * = {preComp0};          (* 140 ns of precomp *)
  36.   pre280ns  * = {preComp1};          (* 280 ns of precomp *)
  37.   pre560ns  * = {preComp0,preComp1}; (* 560 ns of precomp *)
  38.  
  39.   hSizeBits * = 6;
  40.   vSizeBits * = 16-hSizeBits;
  41.   hSizeMask * = 3FH;        (* 2^6  - 1 *)
  42.   vSizeMask * = 3FFH;       (* 2^10 - 1 *)
  43.  
  44. (* all agnii support horizontal blit of at least 1024 bits (128 bytes) wide *)
  45. (* some agnii support horizontal blit of up to 32768 bits (4096 bytes) wide *)
  46.  
  47.   minBytesPerRow * = 128;
  48.   maxBytesPerRow * = 4096;
  49.  
  50.   maxBytesPerRowNoBigBlits * = 128;
  51.  
  52. (* definitions for blitter control register 0 *)
  53.  
  54.   abc    * = 7;
  55.   abnc   * = 6;
  56.   anbc   * = 5;
  57.   anbnc  * = 4;
  58.   nabc   * = 3;
  59.   nabnc  * = 2;
  60.   nanbc  * = 1;
  61.   nanbnc * = 0;
  62.  
  63.  
  64. (* some commonly used operations *)
  65.   aORb   * = {abc,abnc,anbc,anbnc,nabc,nabnc};
  66.   aORc   * = {abc,abnc,anbc,anbnc,nabc,      nanbc};
  67.   aXORc  * = {    abnc,     anbnc,nabc,            nanbc};
  68.   aTOd   * = {abc,abnc,anbc,anbnc};
  69.  
  70.   dest   * = 8;
  71.   srcC   * = 9;
  72.   srcB   * = 10;
  73.   srcA   * = 11;
  74.   ash1   * = 12;
  75.   ash2   * = 13;
  76.   ash4   * = 14;
  77.   ash8   * = 15;
  78.  
  79.  
  80.  
  81.   aShiftShift * = 12;      (* bits to right align ashift value *)
  82.   bShiftShift * = 12;      (* bits to right align bshift value *)
  83.  
  84.  
  85. (* definations for blitter control register 1 *)
  86.   lineMode     * = 0;
  87.   fillOr       * = 3;
  88.   fillXor      * = 4;
  89.   fillCarryIn  * = 2;
  90.   desc         * = 1;       (* blitter descend direction *)
  91.   oneDot       * = 1;     (* one dot per horizontal line *)
  92.   ovFlag       * = 5;
  93.   signFlag     * = 6;
  94.   blitReverse  * = 1;
  95.  
  96.   sud    * = {fillXor};
  97.   sul    * = {fillOr};
  98.   aul    * = {fillCarryIn};
  99.  
  100.   octant8   * = sul+sud;
  101.   octant7   * = aul;
  102.   octant6   * = aul+sul;
  103.   octant5   * = aul+sul+sud;
  104.   octant4   * = aul+sud;
  105.   octant3   * = sul;
  106.   octant2   * = {};
  107.   octant1   * = sud;
  108.  
  109.  
  110. TYPE
  111.  
  112. (* stuff for blit queuer *)
  113.   BltnodePtr * = UNTRACED POINTER TO Bltnode;
  114.   Bltnode * = STRUCT
  115.     n * : BltnodePtr;
  116.     function * : e.PROC;
  117.     stat     * : CHAR;
  118.     blitsize * : INTEGER;
  119.     beamsync * : INTEGER;
  120.     cleanup  * : e.PROC;
  121.   END;
  122.  
  123. CONST
  124.  
  125. (* defined bits for bltstat *)
  126.   cleanup * = 40H;
  127.   cleanme * = cleanup;
  128.  
  129. TYPE
  130.  
  131. (*
  132.  * ciaa is on an ODD address (e.g. the low byte) -- 0BFE001H
  133.  * ciab is on an EVEN address (e.g. the high byte) -- 0BFD000H
  134.  *
  135.  * do this to get the definitions:
  136.  *    extern struct CIA ciaa, ciab;
  137.  *)
  138.  
  139.   Pad * = ARRAY 254 OF SHORTSET;
  140.  
  141.   CIA * = STRUCT
  142.     pra    * : SHORTSET; pad0 * : Pad;
  143.     prb    * : SHORTSET; pad1 * : Pad;
  144.     ddra   * : SHORTSET; pad2 * : Pad;
  145.     ddrb   * : SHORTSET; pad3 * : Pad;
  146.     talo   * : SHORTINT; pad4 * : Pad;
  147.     tahi   * : SHORTINT; pad5 * : Pad;
  148.     tblo   * : SHORTINT; pad6 * : Pad;
  149.     tbhi   * : SHORTINT; pad7 * : Pad;
  150.     todlow * : SHORTINT; pad8 * : Pad;
  151.     todmid * : SHORTINT; pad9 * : Pad;
  152.     todhi  * : SHORTINT; pad10 * : Pad;
  153.     unusedreg * : SHORTSET; pad11 * : Pad;
  154.     sdr    * : SHORTINT; pad12 * : Pad;
  155.     icr    * : SHORTSET; pad13 * : Pad;
  156.     cra    * : SHORTSET; pad14 * : Pad;
  157.     crb    * : SHORTSET;
  158.   END;
  159.  
  160. VAR
  161.   ciaa * [0BFE001H] : CIA;
  162.   ciab * [0BFD000H] : CIA;
  163.  
  164. CONST
  165.  
  166. (* interrupt control register bit numbers *)
  167.   ta      * = 0;
  168.   tb      * = 1;
  169.   alrm    * = 2;
  170.   sp      * = 3;
  171.   flg     * = 4;
  172.   setClr  * = 7;
  173.   ir      * = 7;
  174.  
  175. (* control register A bit numbers *)
  176.   craStart   * = 0;
  177.   craPbon    * = 1;
  178.   craOutmode * = 2;
  179.   craRunmode * = 3;
  180.   craLoad    * = 4;
  181.   craInmode  * = 5;
  182.   craSpmode  * = 6;
  183.   craTodin   * = 7;
  184.  
  185. (* control register B bit numbers *)
  186.   crbStart   * = 0;
  187.   crbPbon    * = 1;
  188.   crbOutmode * = 2;
  189.   crbRunmode * = 3;
  190.   crbLoad    * = 4;
  191.   crbInmode0 * = 5;
  192.   crbInmode1 * = 6;
  193.   crbAlarm   * = 7;
  194.  
  195. (*
  196.  * Port definitions -- what each bit in a cia peripheral register is tied to
  197.  *)
  198.  
  199. (* ciaa port A (0xbfe001) *)
  200.   gamePort1  * = 7;   (* gameport 1, pin 6 (fire button) *)
  201.   gamePort0  * = 6;   (* gameport 0, pin 6 (fire button) *)
  202.   dskRdy     * = 5;   (* disk ready* *)
  203.   dskTrack0  * = 4;   (* disk on track 00* *)
  204.   dskProt    * = 3;   (* disk write protect* *)
  205.   dskChange  * = 2;   (* disk change* *)
  206.   led        * = 1;   (* led light control (0==>bright) *)
  207.   overlay    * = 0;   (* memory overlay bit *)
  208.  
  209. (* ciaa port B (0xbfe101) -- parallel port *)
  210.  
  211. (* ciab port A (0xbfd000) -- serial and printer control *)
  212.   comDTR     * = 7;   (* serial Data Terminal Ready* *)
  213.   comRTS     * = 6;   (* serial Request to Send* *)
  214.   comCD      * = 5;   (* serial Carrier Detect* *)
  215.   comCTS     * = 4;   (* serial Clear to Send* *)
  216.   comDSR     * = 3;   (* serial Data Set Ready* *)
  217.   prtrSel    * = 2;   (* printer SELECT *)
  218.   prtrPOut   * = 1;   (* printer paper out *)
  219.   prtrBusy   * = 0;   (* printer busy *)
  220.  
  221. (* ciab port B (0xbfd100) -- disk control *)
  222.   dskMotor   * = 7;   (* disk motorr* *)
  223.   dskSel3    * = 6;   (* disk select unit 3* *)
  224.   dskSel2    * = 5;   (* disk select unit 2* *)
  225.   dskSel1    * = 4;   (* disk select unit 1* *)
  226.   dskSel0    * = 3;   (* disk select unit 0* *)
  227.   dskSide    * = 2;   (* disk side select* *)
  228.   dskDirec   * = 1;   (* disk direction of seek* *)
  229.   dskStep    * = 0;   (* disk step heads* *)
  230.  
  231.  
  232. TYPE
  233.  
  234. (*
  235.  * do this to get base of custom registers:
  236.  * extern struct Custom custom;
  237.  *)
  238.  
  239.   Coord      * = STRUCT v*,h*: SHORTINT END;
  240.   SerialInfo * = STRUCT flags * : SHORTSET; data * : CHAR END;
  241.   DiskInfo   * = STRUCT flags * : SHORTSET; data * : e.BYTE END;
  242.  
  243.   AudChannel * = STRUCT
  244.     ptr * : e.APTR;      (* ptr to start of waveform data *)
  245.     len * : INTEGER;     (* length of waveform in words *)
  246.     per * : INTEGER;     (* sample period *)
  247.     vol * : INTEGER;     (* volume *)
  248.     dat * : INTEGER;     (* sample pair *)
  249.     pad * : ARRAY 2 OF INTEGER; (* unused *)
  250.   END;
  251.   AudChannels * = ARRAY 4 OF AudChannel;
  252.  
  253.   SpriteDef * = STRUCT
  254.     pos * : INTEGER;
  255.     ctl * : STRUCT
  256.               ev * : e.BYTE;
  257.               flags * : SHORTSET;
  258.             END;
  259.     data * : LONGINT;
  260.   END;
  261.   SpriteDefs * = ARRAY 8 OF SpriteDef;
  262.  
  263.   Custom * = STRUCT
  264.     bltddat * : INTEGER;
  265.     dmaconr * : SET;
  266.     vposr   * : INTEGER;
  267.     vhposr  * : INTEGER;
  268.     dskdatr * : INTEGER;
  269.     joy0dat * : Coord;
  270.     joy1dat * : Coord;
  271.     clxdat  * : SET;
  272.     adkconr * : SET;
  273.     pot0dat * : Coord;
  274.     pot1dat * : Coord;
  275.     potinp  * : SET;
  276.     serdatr * : SerialInfo;
  277.     dskbytr * : DiskInfo;
  278.     intenar * : SET;
  279.     intreqr * : SET;
  280.     dskpt   * : e.APTR;
  281.     dsklen  * : INTEGER;
  282.     dskdat  * : INTEGER;
  283.     refptr  * : INTEGER;
  284.     vposw   * : INTEGER;
  285.     vhposw  * : INTEGER;
  286.     copcon  * : SET;
  287.     serdat  * : SerialInfo;
  288.     serper  * : INTEGER;
  289.     potgo   * : SET;
  290.     joytest * : Coord;
  291.     strequ  * : INTEGER;
  292.     strvbl  * : INTEGER;
  293.     strhor  * : INTEGER;
  294.     strlong * : INTEGER;
  295.     bltcon0 * : SET;
  296.     bltcon1 * : SET;
  297.     bltafwm * : SET;
  298.     bltalwm * : SET;
  299.     bltcpt  * : e.APTR;
  300.     bltbpt  * : e.APTR;
  301.     bltapt  * : e.APTR;
  302.     bltdpt  * : e.APTR;
  303.     bltsize * : INTEGER;
  304.     pad2d   * : e.BYTE;
  305.     bltcon0l * : SHORTSET;   (* low 8 bits of bltcon0, write only *)
  306.     bltsizv  * : INTEGER;
  307.     bltsizh  * : INTEGER;    (* 5e *)
  308.     bltcmod  * : INTEGER;
  309.     bltbmod  * : INTEGER;
  310.     bltamod  * : INTEGER;
  311.     bltdmod  * : INTEGER;
  312.     pad34    * : ARRAY 4 OF INTEGER;
  313.     bltcdat  * : INTEGER;
  314.     bltbdat  * : INTEGER;
  315.     bltadat  * : INTEGER;
  316.     pad3b    * : ARRAY 3 OF INTEGER;
  317.     deniseid * : INTEGER;   (* 7c *)
  318.     dsksync * : INTEGER;
  319.     cop1lc  * : LONGINT;
  320.     cop2lc  * : LONGINT;
  321.     copjmp1 * : INTEGER;
  322.     copjmp2 * : INTEGER;
  323.     copins  * : INTEGER;
  324.     diwstrt * : Coord;
  325.     diwstop * : Coord;
  326.     ddfstrt * : Coord;
  327.     ddfstop * : Coord;
  328.     dmacon  * : SET;
  329.     clxcon  * : SET;
  330.     intena  * : SET;
  331.     intreq  * : SET;
  332.     adkcon  * : SET;
  333.     aud     * : AudChannels;
  334.     bplpt   * : ARRAY 8 OF e.APTR;
  335.     bplcon0 * : SET;
  336.     bplcon1 * : SET;
  337.     bplcon2 * : SET;
  338.     bplcon3 * : SET;
  339.     bpl1mod * : INTEGER;
  340.     bpl2mod * : INTEGER;
  341.     bplcon4 * : INTEGER;
  342.     clxcon2 * : INTEGER;
  343.     bpldat  * : ARRAY 8 OF INTEGER;;
  344.     sprpt   * : ARRAY 8 OF e.APTR;
  345.     spr     * : SpriteDefs;
  346.     color   * : ARRAY 32 OF INTEGER;
  347.     htotal  * : INTEGER;
  348.     hsstop  * : INTEGER;
  349.     hbstrt  * : INTEGER;
  350.     hbstop  * : INTEGER;
  351.     vtotal  * : INTEGER;
  352.     vsstop  * : INTEGER;
  353.     vbstrt  * : INTEGER;
  354.     vbstop  * : INTEGER;
  355.     sprhstrt * : INTEGER;
  356.     sprhstop * : INTEGER;
  357.     bplhstrt * : INTEGER;
  358.     bplhstop * : INTEGER;
  359.     hhposw   * : INTEGER;
  360.     hhposr   * : INTEGER;
  361.     beamcon0 * : SET;
  362.     hsstrt   * : INTEGER;
  363.     vsstrt   * : INTEGER;
  364.     hcenter  * : INTEGER;
  365.     diwhigh  * : INTEGER;    (* 1e4 *)
  366.     padf3    * : ARRAY 11 OF INTEGER;
  367.     fmode    * : INTEGER;
  368.   END;
  369.  
  370. VAR
  371.   custom * [0DFF000H] : Custom;
  372.  
  373. CONST
  374.  
  375. (* defines for beamcon register *)
  376.   varVBlank     * = 12;  (* Variable vertical blank enable *)
  377.   loLDis        * = 11;  (* long line disable *)
  378.   cscBlankEn    * = 10;  (* redirect composite sync *)
  379.   varVSync      * = 9;  (* Variable vertical sync enable *)
  380.   varHSync      * = 8;  (* Variable horizontal sync enable *)
  381.   varBeam       * = 7;  (* variable beam counter enable *)
  382.   displayDual   * = 6;  (* use UHRES pointer and standard pointers *)
  383.   displayPal    * = 5;  (* set decodes to generate PAL display *)
  384.   varCSync      * = 4;  (* Variable composite sync enable *)
  385.   csBlank       * = 3;  (* Composite blank out to CSY* pin *)
  386.   cSyncTrue     * = 2;  (* composite sync true signal *)
  387.   vSyncTrue     * = 1;  (* vertical sync true *)
  388.   hSyncTrue     * = 0;  (* horizontal sync true *)
  389.  
  390. (* new defines for bplcon0 *)
  391.   useBplCon3 * = 1;
  392.  
  393. (* new defines for bplcon2 *)
  394.   zdCTen        * = 10; (* colormapped genlock bit *)
  395.   zdBPen        * = 11; (* use bitplane as genlock bits *)
  396.   udBPSel0      * = 12; (* three bits to select one *)
  397.   zdBPSel1      * = 13; (* of 8 bitplanes in *)
  398.   zdBPSel2      * = 14; (* ZDBPEN genlock mode *)
  399.  
  400. (* defines for bplcon3 register *)
  401.   extBlnkEn     * = 0;  (* external blank enable *)
  402.   extBlkZd      * = 1;  (* external blank ored into trnsprncy *)
  403.   zdClkEn       * = 2;  (* zd pin outputs a 14mhz clock*)
  404.   brdnTran      * = 4;  (* border is opaque *)
  405.   drdnBlnk      * = 5;  (* border is opaque *)
  406.  
  407. (* write definitions for dmaconw *)
  408.   dmaSet  * = 15;
  409.   audio   * = {0..3};   (* 4 bit mask *)
  410.   aud0    * = 0;
  411.   aud1    * = 1;
  412.   aud2    * = 2;
  413.   aud3    * = 3;
  414.   disk    * = 4;
  415.   sprite  * = 5;
  416.   blitter * = 6;
  417.   copper  * = 7;
  418.   raster  * = 8;
  419.   master  * = 9;
  420.   blithog * = 10;
  421.   all     * = {0..8};    (* all dma channels *)
  422.  
  423.   bitSet * = {dmaSet};
  424.   bitClr * = {};
  425.  
  426. (* read definitions for dmaconr *)
  427. (* bits 0-8 correspnd to dmaconw definitions *)
  428.   bltdone * = 14;
  429.   bltnzero* = 13;
  430.  
  431.  
  432. CONST
  433.  
  434. (* intbits: *)
  435.  
  436.   intSet   * = 15;  (* Set/Clear control bit. Determines if bits *)
  437.                   (* written with a 1 get set or cleared. Bits *)
  438.                   (* written with a zero are allways unchanged *)
  439.   intEn    * = 14;  (* Master interrupt (enable only ) *)
  440.   exter    * = 13;  (* External interrupt *)
  441.   dskSync  * = 12;  (* Disk re-SYNChronized *)
  442.   rbf      * = 11;  (* serial port Receive Buffer Full *)
  443.   aud3i    * = 10;  (* Audio channel 3 block finished *)
  444.   aud2i    * = 9;   (* Audio channel 2 block finished *)
  445.   aud1i    * = 8;   (* Audio channel 1 block finished *)
  446.   aud0i    * = 7;   (* Audio channel 0 block finished *)
  447.   blit     * = 6;   (* Blitter finished *)
  448.   vertb    * = 5;   (* start of Vertical Blank *)
  449.   coper    * = 4;   (* Coprocessor *)
  450.   ports    * = 3;   (* I/O Ports and timers *)
  451.   softint  * = 2;   (* software interrupt request *)
  452.   dskblk   * = 1;   (* Disk Block done *)
  453.   tbe      * = 0;   (* serial port Transmit Buffer Empty *)
  454.  
  455.  
  456. END Hardware.
  457.  
  458.  
  459.